package top.stmo.mapper;

import org.apache.ibatis.annotations.Param;
import top.stmo.pojo.Brand;

import java.util.List;
import java.util.Map;

public interface BrandMapper {

    //查询所有
    List<Brand> findAllBrand();

    //根据id查询
    Brand findById(int id);

    /**
     *      多条件查询
     *
     *      1.散装参数：如果方法中有多个参数，需使用@Param("SQL参数占位符名称")
     *      2.对象参数：对象的属性名称要和参数占位符名称一致
     *      3.需要保证sql中的参数名和map集合的键的名称对应上，即可设置成功
     *
     *
     *   MyBatis 参数封装：
     *
     *       单个参数：
     *           1. POJO类型：直接使用，属性名 和 参数占位符名称 一致
     *           2. Map集合：直接使用，键名 和 参数占位符名称 一致
     *           3. Collection：封装为Map集合，可以使用@Param注解，替换Map集合中默认的arg键名
     *               map.put("arg0",collection集合);
     *               map.put("collection",collection集合);
     *           4. List：封装为Map集合，可以使用@Param注解，替换Map集合中默认的arg键名
     *               map.put("arg0",list集合);
     *               map.put("collection",list集合);
     *               map.put("list",list集合);
     *           5. Array：封装为Map集合，可以使用@Param注解，替换Map集合中默认的arg键名
     *               map.put("arg0",数组);
     *               map.put("array",数组);
     *           6. 其他类型：直接使用
     *
     *       多个参数：封装为Map集合,可以使用@Param注解，替换Map集合中默认的arg键名
     *               map.put("arg0",参数值1)
     *               map.put("param1",参数值1)
     *               map.put("agr1",参数值2)
     *               map.put("param2",参数值2)
     *
     *               ---------------@Param("username")
     *               map.put("username",参数值1)
     *               map.put("param1",参数值1)
     *               map.put("agr1",参数值2)
     *               map.put("param2",参数值2)
     *
     *      结论： Collection、List、Array、多个参数 需使用@Param("SQL参数占位符名称")
     */
    //散装参数多条件查询
    List<Brand> findByCondition(@Param("status")int status,@Param("companyName")
            String companyName,@Param("description")String description);

    //对象参数多条件查询
    List<Brand> findByCondition2(Brand brand);

    //Map集合参数多条件查询
    List<Brand> findByCondition3(Map map);

    //动态条件查询
    List<Brand> findByCondition4(Map map);

    //单条件的动态查询
    List<Brand> selectByConditionSingle(Brand brand);

    //添加字段
    void addBrand(Brand brand);

    //修改全部字段
    void updateBrand(Brand brand);

    //动态修改字段
    void updateBrand2(Brand brand);

    //根据id删除字段
    void deleteBrandById(int id);

    //根据id删除批量字段
    void deleteByIds(@Param("ids") int[] ids);
}
